package com.gc.common.utils;

import cn.hutool.core.lang.Console;
import com.gexin.fastjson.JSONObject;
import com.gexin.rp.sdk.base.IPushResult;
import com.gexin.rp.sdk.base.impl.AppMessage;
import com.gexin.rp.sdk.base.impl.ListMessage;
import com.gexin.rp.sdk.base.impl.SingleMessage;
import com.gexin.rp.sdk.base.impl.Target;
import com.gexin.rp.sdk.http.IGtPush;
import com.gexin.rp.sdk.template.NotificationTemplate;
import com.gexin.rp.sdk.template.NotyPopLoadTemplate;
import com.gexin.rp.sdk.template.StartActivityTemplate;
import com.gexin.rp.sdk.template.style.Style0;

import java.util.ArrayList;
import java.util.List;

public class GeTuiUtils {

    private static String appId = "OZ82GY8LcS98IzSrBoZyf4";
    private static String appKey = "wBw1dtbzaR8GF4lBdk1qO5";
    private static String masterSecret = "k346x2ReRa7PPqdSGAdv2A";
    private static String geTuiUrl = "http://sdk.open.api.igexin.com/apiex.htm";

    /**
     * 样式模板Style0
     *
     * @param title   推送标题
     * @param content 推送内容
     * @param ring    收到通知是否响铃
     * @param vibrate 收到通知是否振动
     * @return
     */
    private static Style0 style0(String title, String content, boolean ring, boolean vibrate) {
        Style0 style = new Style0();
        // 设置推送标题
        style.setTitle(title);
        // 推送内容
        style.setText(content);
        // 设置响铃
        style.setRing(ring);
        // 设置震动
        style.setVibrate(vibrate);
        return style;
    }


    /**
     * 推送模板 ----  在通知栏显示一条通知，用户点击后打开应用的首页。
     *
     * @param title   通知栏标题
     * @param content 通知栏内容
     * @return
     */
    public static NotificationTemplate notificationTemplateDemo(String title, String content,String skipUrl) {
        NotificationTemplate template = new NotificationTemplate();
        template.setAppId(appId);
        template.setAppkey(appKey);
        Style0 style = style0(title, content, true, true);
        template.setStyle(style);
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("url",skipUrl);
        template.setTransmissionContent(jsonObject.toJSONString());
        template.setTransmissionType(1);
        return template;
    }


    /**
     * 推送模板 ----  在通知栏显示一条通知，用户点击后打开应用内指定的页面。
     *
     * @param title   通知栏标题
     * @param content 通知栏内容
     * @return
     */
    public static StartActivityTemplate startActivityTemplateDemo(String title, String content) {
        StartActivityTemplate template = new StartActivityTemplate();
        template.setAppId(appId);
        template.setAppkey(appKey);
        Style0 style = style0(title, content, true, true);
        template.setStyle(style);
        String intent = "";
        template.setIntent(intent);
        return template;
    }

    /**
     * 推送方式----  对指定应用群推消息 pushMessageToApp   打开应用首页
     *
     * @param title
     * @param content
     * @return
     */
    public static IPushResult allPush(String title, String content,String skipUrl) {
        IGtPush push = new IGtPush(geTuiUrl, appKey, masterSecret);
        NotificationTemplate template = notificationTemplateDemo(title, content,skipUrl);
        // STEP5：定义"AppMessage"类型消息对象,设置推送消息有效期等推送参数
        List<String> appIds = new ArrayList<String>();
        appIds.add(appId);
        AppMessage message = new AppMessage();
        message.setData(template);
        message.setAppIdList(appIds);
        // 设置离线推送
        message.setOffline(true);
        // 时间单位为毫秒
        message.setOfflineExpireTime(1000 * 600);

        // STEP6：执行推送
        IPushResult ret;
        try{
            ret =  push.pushMessageToApp(message);//个别推送
            Console.log(ret.getResponse().toString());
            return ret;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 推送方式----   对指定列表用户推送消息 pushMessageToList 打开应用首页
     *
     * @param cid
     * @param title
     * @param content
     * @return
     */
    public static IPushResult listPush(String cid, String title, String content,String skipUrl) {
        IGtPush push = new IGtPush(geTuiUrl, appKey, masterSecret);
        NotificationTemplate template = notificationTemplateDemo(title, content,skipUrl);
        ListMessage message = new ListMessage();
        message.setOffline(true);
        // 离线有效时间，单位为毫秒，可选
        message.setOfflineExpireTime(24 * 3600 * 1000);
        message.setData(template);
        message.setPushNetWorkType(0); // 可选。判断是否客户端是否wifi环境下推送，1为在WIFI环境下，0为不限制网络环境。

        List<Target> targets = new ArrayList<Target>();
        Target target = new Target();
        target.setAppId(appId);
        target.setClientId(cid);
        targets.add(target);

        String taskId = push.getContentId(message, "任务别名_LIST");
        // STEP6：执行推送
        IPushResult ret;
        try{
            ret =  push.pushMessageToList(taskId, targets);
            Console.log(ret.getResponse().toString());
            return ret;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 推送方式----   对单个用户推送消息pushMessageToSingle 打开应用首页
     *
     * @param cid
     * @param title
     * @param content
     * @return
     */
    public static IPushResult singlePush(String cid, String title, String content,String skipUrl) {
        IGtPush push = new IGtPush(geTuiUrl, appKey, masterSecret);
        NotificationTemplate template = notificationTemplateDemo(title, content,skipUrl);
        //添加要推送的终端
        Target target = new Target();
        target.setAppId(appId);
        target.setClientId(cid);
        //个别推送信息
        SingleMessage singleMessage = new SingleMessage();
        singleMessage.setData(template);
        singleMessage.setOffline(true);
        // 离线消息有效时间为7天
        singleMessage.setOfflineExpireTime(1000 * 3600 * 24 * 7);
        IPushResult ret ;
        try{
           ret =  push.pushMessageToSingle(singleMessage, target);//个别推送
            Console.log(ret.getResponse().toString());
            return ret;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 推送模板 ----  通知栏弹框下载模板
     *
     * @param title   通知栏标题
     * @param content 通知栏内容
     * @return
     */
    public static NotyPopLoadTemplate notyPopLoadTemplate(String title, String content) {
        NotyPopLoadTemplate template = new NotyPopLoadTemplate();
        // 设置APPID与APPKEY
        template.setAppId(appId);
        template.setAppkey(appKey);
        // 设置通知栏标题与内容
        template.setNotyTitle(title);
        template.setNotyContent(content);
        // 配置通知栏图标
        template.setNotyIcon("");
        // 设置通知是否响铃，震动，或者可清除
        template.setBelled(true);
        template.setVibrationed(true);
        template.setCleared(true);
        // 设置弹框标题与内容
        template.setPopTitle("弹框标题");
        template.setPopContent("弹框内容");
        // 设置弹框显示的图片
        template.setPopImage("");
        template.setPopButton1("下载");
        template.setPopButton2("取消");
        // 设置下载标题
        template.setLoadTitle("下载标题");
        template.setLoadIcon("file://icon.png");
        //设置下载地址
        template.setLoadUrl("http://gdown.baidu.com/data/wisegame/80bab73f82cc29bf/shoujibaidu_16788496.apk");
        // 设置定时展示时间
        // template.setDuration("2015-01-16 11:40:00", "2015-01-16 12:24:00");
        return template;
    }
}
